package ari.java.array;

/**
 * 数组的插入、删除、按照下标随机访问操作； 数组中的数据是int类型的。
 */
public class Array {
    // define int type save date
    public int data[];
    // define array length
    private int n;
    // define actural count
    private int count;

    public Array(int capicity) {
        this.data = new int[capicity];
        this.n = capicity;
        this.count = 0;
    }

    // contructor method define array

    // 根据索引，找到数据中的元素并返回
    public int find(int index) {
        if (index < 0 || index > count)
            return -1;
        return data[index];
    }

    // 插入元素：头部插入，尾部插入
    public boolean insert(int value, int subscript) {
        if (subscript < 0 || subscript > count) {
            System.out.println("error,subscript not correct");
            return false;
        }
        if (count == n) {
            System.out.println("array is full");
            return false;
        }
        for (int i = count; i > value; --i) {
            data[i] = data[i - 1];
        }
        data[subscript] = value;
        ++count;
        return true;
    }

    // array is full
    public void printAll() {
        for (int i = 0; i < count; ++i) {
            System.out.println(data[i] + "--");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        Array array = new Array(5);
        array.insert(3, 0);
        array.printAll();
        array.insert(4, 0);
        array.printAll();
        array.insert(5, 1);
        array.printAll();
        array.insert(9, 3);
        array.printAll();
        array.insert(10, 3);
        array.printAll();
    }

    // 如果count还没满，那么就可以插入数据到数组中
    // 位置不合法
    // 位置合法

    // 根据索引，删除数组中元素
    // 从删除位置开始，将后面的元素向前移动一位
    // 删除数组末尾元素 这段代码不需要也可以

    // int[] arr = new int[count - 1];
    // for (int i = 0; i < count - 1; i++) {
    // arr[i] = data[i];
    // }
    // this.data = arr;

}